精通Linux系列十八:用户及其环境变量
精通Linux系列点击关注公众号,AI&编程干货及时送达
用户及其环境变量
命令 | 含义 |
logname | 打印你的登录名。 |
whoami | 打印你当前的有效用户名。 |
id | 打印用户的ID和用户的组成员身份。 |
who | 列出已登录的用户,长格式输出。 |
users | 列出已登录的用户,短格式输出。 |
finger | 打印关于用户的信息。 |
last | 确定某人上次登录的时间。 |
printenv | 打印你的环境变量。 |
logname
你是谁?只有系统确切知道。这个程序包可以告诉你所有关于用户的信息:他们的名字,登录时间,和他们环境的属性。
stdin stdout - file -- opt --help --version
logname
logname
(登录名)命令可以打印出你的登录名(这可能看起来很微不足道,但是在shell脚本中却很有用):
→ logname
smith
如果这个命令在你的系统中不能工作,试试以下命令:
→ echo $LOGNAME
whoami
stdin stdout - file -- opt --help --version
whoami
whoami
(我是谁)命令可以打印出当前有效的用户名。如果你使用了sudo
命令,这个用户名可能会与你的登录名(logname
的输出)有所不同。这个例子可以区分whoami
和logname
:
→ logname
smith
→ sudo logname
smith
→ whoami
smith
→ sudo whoami
root
id
stdin stdout - file -- opt --help --version
id [options] [username]
每个用户都有一个唯一的,数值型的用户ID,以及一个唯一的,数值型的默认组ID。id
(身份)命令可以打印出这些值以及他们关联的用户名和组名:
→ id
uid=500(smith) gid=500(smith)
groups=500(smith),6(disk),490(src),501(cdwrite)
常用选项
-u | 打印有效的用户ID并退出。 |
-g | 打印有效的组ID并退出。 |
-G | 打印用户属于的所有其他组的ID。 |
-n | 打印名字(对于用户和组)而不是数字ID。必须与-u , -g , 或者 -G 一起使用。例如,id -Gn 产生的输出与groups (组)命令相同。 |
-r | 打印登录值而不是有效值。必须与-u , -g , 或者 -G 一起使用。 |
who
stdin stdout - file -- opt --help --version
who [options] [filename]
who
(谁)命令列出所有已登录的用户,每行一个用户的shell:
→ who
smith pts/0 Sep 6 17:09 (:0)
barrett pts/1 Sep 6 17:10 (10.24.19.240)
jones pts/2 Sep 8 20:58 (192.168.13.7)
jones pts/4 Sep 3 05:11 (192.168.13.7)
通常,who
从文件*/var/run/utmp获取数据。filename
参数可以指定不同的数据文件,如/var/log/wtmp用于过去的登录或/var/log/btmp*用于失败的登录。
常用选项
-H | 打印一行标题作为第一行。 |
--lookup | 对于远程登录的用户,打印来源的主机名。 |
-u | 也打印每个用户在他/她的终端的空闲时间。 |
-T | 也指示每个用户的终端是否可写(参见"即时消息"中的mesg )。加号表示"是",减号表示"否",问号表示"未知"。 |
-m | 只显示关于你自己的信息(即,与当前终端相关的用户)。 |
-q | 快速显示用户名,以及用户的数量。像users (用户)命令,但是会添加一个数量。 |
users
stdin stdout - file -- opt --help --version
users [filename]
users
(用户)命令打印有登录会话的用户的快速列表(如果一个用户正在运行多个shell,她会出现多次):
→ users
barrett jones smith smith smith
像who
命令一样,users
默认读取*/var/log/utmp*,但可以从另一个提供的文件中读取。
finger
stdin stdout - file -- opt --help --version
finger [options] [user[@host]]
finger
(信息)命令以短格式打印已登录用户的信息:
→ finger
Login Name Tty Idle Login Time
smith Sandy Smith :0 Sep 6 17:09
barrett Daniel Barrett :pts/1 24 Sep 6 17:10
jones Jill Jones :pts/2 Sep 8 20:58
或者以长格式:
→ finger smith
Login: smith Name: Sandy Smith
Directory: /home/smith Shell: /bin/bash
On since Sat Sep 6 17:09 (EDT) on :0
Last login Mon Sep 8 21:07 (EDT) on pts/6 from web1
No mail.
Project:
Enhance world peace
Plan:
Mistrust first impulses; they are always right.
*user
参数可以是本地用户名,也可以是远程用户,格式为user@host
*。只有在远程主机配置为响应finger
请求时,远程主机才会做出响应。
有用的选项
-l | 以长格式打印。 |
-s | 以短格式打印。 |
-p | 不显示项目和计划部分,这些部分通常分别从用户的*/.project和/.plan*文件中读取。 |
last
stdin stdout - file -- opt --help --version
last [选项] [用户] [终端]
last
命令按时间倒序显示登录历史:
→ last
bob pts/3 localhost 周一 9 21:07 - 21:08 (00:01)
sue pts/6 :0 周一 9 20:25 - 20:56 (00:31)
bob pts/4 myhost 周日 7 22:19 仍然登录
...
您可以提供用户名或终端名称来限制输出。
有用的选项
-* N* | 仅打印最新的*N 行输出,其中N *是正整数。 |
-i | 显示IP地址而不是主机名。 |
-R | 不显示主机名。 |
-x | 还显示系统关闭和系统运行级别的更改(例如,从单用户模式切换到多用户模式)。 |
-f filename | 从与*/var/run/wtmp*不同的数据文件中读取;有关更多详细信息,请参阅who 命令。 |
printenv
stdin stdout - file -- opt --help --version
printenv [环境变量]
printenv
命令打印您的Shell已知的所有环境变量及其值:
→ printenv
HOME=/home/smith
MAIL=/var/spool/mail/smith
NAME=Sandy Smith
SHELL=/bin/bash
...
或仅打印指定的变量:
→ printenv HOME SHELL
/home/smith
/bin/bash
推荐阅读
你好,我是拾叁,7年开发老司机、互联网两年外企5年。怼得过阿三老美,也被PR comments搞崩溃过。这些年我打过工,创过业,接过私活,也混过upwork。赚过钱也亏过钱。一路过来,给我最深的感受就是不管学什么,一定要不断学习。只要你能坚持下来,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯和编程知识,帮你积累弯道超车的资本。